#include <unistd.h>
#include <fcntl.h>

int main() {
    // 打开文件，假设返回fd=3
    int file_fd = open("output.txt", O_WRONLY | O_CREAT, 0644);

    // 备份原始的fd=1（终端）
    int saved_stdout = dup(STDOUT_FILENO);

    // 重定向：让fd=1指向output.txt
    dup2(file_fd, STDOUT_FILENO);  // dup2(3, 1)
    


    // 此时：
    //   fd=1 --> output.txt
    //   fd=3 --> output.txt
    //   saved_stdout（如fd=4） --> 终端

    // 写入fd=1（实际写入文件）
    write(STDOUT_FILENO, "Hello\n", 6);

    // 恢复原始fd=1（重新指向终端）
    dup2(saved_stdout, STDOUT_FILENO);

    // 关闭不再需要的描述符
    close(file_fd);
    close(saved_stdout);

    // 现在写入fd=1会输出到终端
    write(STDOUT_FILENO, "World\n", 6);
    return 0;
}
